两天前,一个朋友打电话给我,问我如何估计项目的开发时间。我很惊讶,问他他们以前是怎么估计的。他说,过去,都是开了一次会议,谈论他们自己的意见。最后,负责人拍了拍头,给了我一个时间。然而,这次我遇到了一个非常严肃的客户,他不仅要估计项目的开发时间,还要明确说明具体的基础和估算方法。我阅读了一些数学统计和项目估计信息,并告诉他如何使用一元线性回归来分析和估计软件项目的开发时间。
问题的定义和数学模型
在这里,我们只考虑一个相对简单的一元回归问题,即的方式Proxy预测项目开发时间。这是什么意思?Proxy。Proxy称为代理变量,简单地说,它是估计项目开发时间的数学基础。直率地说,我们总是有一个基础来预测开发时间,如需求中的用例数、概要设计中的物理数、数据库中的表数等。Proxy为x,项目开发时间为y,所以可以得到y=f(x),学过初等数学的人都能理解,也就是说,开发时间是Proxy如果我们知道新项目的函数x,又知道函数f,那么y就出来了。可惜天下哪有这么好的事,我们现在既不知道f,又不知道x,别说x我们甚至不知道该用哪个。Proxy做x。
但是,没有必要悲观。经过以上分析,我们至少明确了奋斗的方向:
1、找出候选的Proxy。
2、选择最合适的Proxy作为x。
3、得到x的值。
4、确定函数f。
5、得出y。
让我们一步一步地解决所有的问题。
找出候选的Proxy
虽然一个项目有很多特征,但不是任何特征都可以作为Proxy的。要成为Proxy,至少要满足以下四个条件。
1)Proxy值应与工作量密切相关。
不需要解释这个,也就是说,Proxy的值和y值要有相关性。这里先定性说一下相关性的概念,定量分析后再说。
2)Proxy应该是能明确得出值的,没有二义性。
这是说Proxy对应一个明确的值,一是一,二是二,不能取好、多这个值。
3)Proxy可以在项目开始阶段得到或准确估计。
在这个初始阶段,最迟的设计不应该晚于总体设计,因为估计是在开始时进行的,所以Proxy一定要在初始阶段得到,否则项目结束后谁还会做估算,实际值就会出来。
4)Proxy对不同的实施方案很敏感。
也就是说,当开发方法、开发过程等因素发生变化时,Proxy应该具有一定的敏感性。
经过以上分析,我想选择什么?Proxy每个人心里都有点谱。一般来说,估计往往被视为Proxy需求分析中的用例数量、需求分析中的功能模块数量、概要设计中的物理数量和数据库设计中的数量。当然,您也可以根据上述要求选择自己Proxy。在本文中,我们暂时选择三个用例数、实体数和表数Proxy作为候选。
选择最合适的Proxy作为x
这里所谓的最合适,在数学上意味着和开发时间y相关性最强。那么什么是相关性呢?直观地说,两个变量之间的相关性是指两个变量之间的密切关系,可以在数学上用相关系数来表示。相关系数计算公式如下:
至于为什么这个公式能反映两个变量的相关性,可以参考高等数理统计的相关资料,本文不再赘述,顺便说一句,r的范围在-1~1绝对值越大,相关性越强。如果是正值,则表示两个变量正相关,否则为负相关。知道了这一点,我们这一步的目的是找出候选人Proxy中与y最大的相关系数x。